package com.woniuxy.serive.impl;

import com.woniuxy.dao.RbacMenuDao;
import com.woniuxy.entity.RbacMenu;
import com.woniuxy.serive.RbacMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@Service
public class RbacmenuServiceImpl implements RbacMenuService {
    @Autowired
    RbacMenuDao rbacMenuDao;
    @Override
    public List<RbacMenu> findAll() {
        return rbacMenuDao.findAll();

    }
    @Override
    public List<RbacMenu> findAllByRoleId(String roles){
        //这个是所有菜单
        List<RbacMenu> all = rbacMenuDao.findAll();
        //通过roles查中间表 rbac_role_menu，查出这个角色下所拥有的菜单id
        List<String> rolesMenuId =  rbacMenuDao.findAllMenuId(roles);
        //一级菜单  必须使用递归
        List<RbacMenu> rbacMenus = traverseTheMenusYouOwn(all, rolesMenuId);
        return rbacMenus;
    }

    /**
     * 我们的result是所有数据，此时，删掉不要的菜单
     * @param meuns 所有菜单
     * @param rolesMenuId 我们应该有的菜单id
     * @return 删掉没有权限菜单 返回的List
     */
    private List<RbacMenu> traverseTheMenusYouOwn(List<RbacMenu> meuns,List<String> rolesMenuId){
            Iterator<RbacMenu> iterator = meuns.iterator();
            while (iterator.hasNext()) {
            //就是这些角色 不包含就应该删掉菜单
                RbacMenu rbacMenu = iterator.next();
                Integer id = rbacMenu.getId();
                if (!rolesMenuId.contains(id+"")) {
                //一级菜单你有数据 但是下面的2级菜单有没有呢？
                //有上级菜单添加成功以后，需要继续递归然后添加下一级菜单
                if (rbacMenu.getMenus().size()!= 0) {
                    //父菜单虽然说我没有这个权限，但是它还有子菜单，如果我的子菜单我拥有，那么父菜单也需要存在
                    traverseTheMenusYouOwn(rbacMenu.getMenus(),rolesMenuId);
                }else{
                    //如果子菜单没有，此时父菜单也不包含在里面 直接删掉父菜单
                    iterator.remove();
                }
            }
        }
        return meuns;
    }
}
